//*************************************************************
//AXD809 快速测试模式
//*************************************************************
#include "define.h"
#include "disp.h"
#include "power.h"
#include "clk.h"
#include "gpio.h"
#include "time.h"
#include "uart.h"
#include "spk.h"
#include "flash.h"
#include "adc.h"
#include "algo.h"
#include "bp.h"
#include "func.h"
#include "op.h"
#include "pwm.h"
#include "fasttest.h"
#include "inner_voice.h"

void FastTestMode(void)
{
	uint8 N=0;
	uint8 i=0;
//	uint8 k=0;
	volatile static uint8 BatteryLowFlag=0;
	volatile uint16  battemp = 0;
	volatile uint16  batcache[4];
    volatile uint8 flag_is_adc_lbt_first_detect = 0;

	DisplayHalfByte(0xf,SYSTen);	//2-F
	DisplayHalfByte(0xa,SYSSingle);	//1-A
	while(!KEY_TIME&&!KEY_POWER&&!KEY_MEMORYUP);
	ShowAllIcon();						//上电进入后全显
	delay(50);
	DarkAllIcon();
	DisplayHalfByte(0xf,SYSTen);	//2-F
	DisplayHalfByte(0xa,SYSSingle);	//1-A
	LBTCount=0;
	BatteryLowFlag = 0;

	keydelay();
    BB = PUMP;
    PWM_SetDutyCycle(PWM1,255);//ON PUMP
    iocontrolon();
	AutoOffTimew=0;
	N=0;
	while(KEY_POWER)			//测试模式中按下开关键退出
	{
		if((AutoOffTimew%100) == 33)
		{
			LedOff;
			// OutRed = 0;
			// OutGreen = 1;
			DisplayHalfByte(1,DIASingle);
		}
		else if((AutoOffTimew%100) == 66)
		{
			LedOff;
			// OutRed = 1;
			// OutGreen = 0;
			DisplayHalfByte(2,DIASingle);
		}
		else if((AutoOffTimew%100) == 99)
		{
			LedOn;
			// OutRed = 0;
			// OutGreen = 0;
			DisplayHalfByte(0x00,DIASingle);
            UserSARADC_LBT_Init();
            SARADC_ConversionCmd(ENABLE);//启动转换
            SARADC_ClearITStatus(SARADC_SR_CONIF);//清转换完成标志位
            while(!SARADC_GetITStatus(SARADC_SR_CONIF));//SARADC_SR_CONIF

            batcache[3]=batcache[2];
            batcache[2]=batcache[1];
            batcache[1]=batcache[0];
            batcache[0]=SARADC_GetConversionValue();
            N++;

		}

        if (flag_is_adc_lbt_first_detect == 0)
        {
            if (N>50)//特殊处理 刚开始时adc不稳定  过滤
            {
                N = 0;
                flag_is_adc_lbt_first_detect = 1;
            }
        }

		if(N>5 && flag_is_adc_lbt_first_detect)
		{
			if(N>6)
            N=6;
            battemp = 0;
            for (i = 0; i < 4; i++)
            {
                battemp += batcache[i];
            }
			battemp = battemp / 4;
			if(battemp<291)
			{
                BB = PUMPOFF | VALVEOFF;
                iocontroloff();
                BatteryLowFlag = 1;
				if(VoiceEnable)
				{
                    if (VoiceType==1 && VoiceType2 == 4)//BP507内置语音
                    {
                        VoiceStop = 0;
                        inner_voice_one_cmd(INNER_CMD_INSUFFICIENT_POWER);
                        if (VoiceStop == 0)
                        {
                            inner_voice_one_cmd(INNER_CMD_PLEASE_REPLACE_THE_BATTERY);
                        }
                    }
                    else if(VoiceType== 9)
                    {
                        SoundNoWait(0xD0);//D0H Low battery, please change the batteries
                    }
					else if(VoiceType==2)
					{
						SoundNoWait(0x91);
					}
				}
				for(i=0;i<5;i++)
				{
                    UserSARADC_LBT_Init();
                    SARADC_ConversionCmd(ENABLE);//启动转换
                    SARADC_ClearITStatus(SARADC_SR_CONIF);//清转换完成标志位
                    while(!SARADC_GetITStatus(SARADC_SR_CONIF));//SARADC_SR_CONIF

                    batcache[3]=batcache[2];
                    batcache[2]=batcache[1];
                    batcache[1]=batcache[0];
                    batcache[0]=SARADC_GetConversionValue();
                    N++;
					LBTIconOn;
					delay(15);
					LBTIconOff;
					delay(10);
				}
			}
            else
            {
                BatteryLowFlag = 0;
            }
		}
		if(BatteryLowFlag == 0)
		{
			LBTIconOff;
			PUMPPWMValue=65530;
			if((AutoOffTimew%50)<25)
			{
                BB = PUMP | VALVE;
                PWM_SetDutyCycle(PWM1,255);//ON PUMP
                iocontrolon();
			}
			else
			{
                BB = PUMPOFF | VALVEOFF;
                iocontroloff();
			}
		}
	}

//TestOver:
	DarkAllIcon();
	DisplayHalfByte(0,DIATen);	//2-0
	DisplayHalfByte(0xf,DIASingle);			//1-F
	while(!KEY_POWER);
	BB=PUMP | VALVE;
	iocontroloff();
	if(VoiceEnable)
	{
		if(VoiceType==9) SoundNoWait(0xC9);//C9H Normal
		else if(VoiceType==4) SoundNoWait(0xB4);
        while (!Busy && KEY_POWER)
        {
            /* code */
        }
		delay(10);
	}
	IsCalibrate=0;
}



// void FastTestMode_old(void)
// {
// 	uint8 i;
// 	uint32  battemp;
// 	uint16  batcache[4] = { 0 };
// 	uint8 N=0;
// 	uint16 ZeroCountTemp;

// 	IsCalibrate=1;
// 	if(UparmWWFlag)
// 		{
// 			if(RCSensorType) 	AA1=A1UPR;
// 			else				AA1=AA1UP;
// 			B1=B1UP;
// 			C1=C1UP;
// 		}
// 	else
// 		{
// 			if(RCSensorType) 	AA1=A1WWR;
// 			else				AA1=A1WW;
// 			B1=B1WW;
// 			C1=C1WW;
// 		}

// 	IsPowerOn=1;
// 	ShowAllIcon();
// 	AutoOffTimew=0;
// 	ADOKFlag=0;
// 	while(!ADOKFlag);
// 	ZeroCountw = SensorCountw;
// 	while(N<5)
// 	{
// 		delay(8);
// 		Mathhw=SensorCountw;
// 		if (Mathhw>ZeroCountw)
// 	     	{
// 	     		Mathlw=Mathhw-ZeroCountw;
// 	     	}
// 		else
// 	     	{
// 	      		Mathlw=ZeroCountw-Mathhw;
// 	     	}
// 		if ((Mathlw>8)||(RCSensorType&&(ZeroCountw<63535)&&(ZeroCountw>2000)))	//R type sensor  2000<count<63535; C type senosr  count<0x100;
// 			{
// 				N=0;
//  				ZeroCountw = Mathhw;
// 			}
// 		N++;
// 	}
// 	while(AutoOffTimew<50||!KEY_POWER||!KEY_MEMORYUP||!KEY_TIME);
// 	keydelay();//以上为全显+归零阶段

// 	DarkAllIcon();
// 	DisplayHalfByte(0xc,SYSTen);	//2-C
// 	DisplayHalfByte(0xa,SYSSingle);		//1-A

// 	while(KEY_TIME)
// 	{
// 		ADOKFlag=0;
// 		while(!ADOKFlag);
// 		calpressure();
// 		Calshowpres();
// 		LCD5bitDisplayT(SensorCountw);


// 		if(!KEY_POWER)
// 		{
// 			ZeroCountTemp=SensorCountw-ZeroCountw;
// 			if(ZeroCountTemp<5000||ZeroCountTemp>20000)
// 			{
// 				DisplayHalfByte(0x10,DIAHundred);
// 				DisplayHalfByte(0xe,DIATen);			/* 'E' */
// 				DisplayHalfByte(0xc,DIASingle);	//错误代码
// 				delay(75);
// 			}
// 			else
// 			{
// 				DarkAllIcon();
// 				AA1=ZeroCountTemp;
// 				//LCD5bitDisplayT(AA1);
// 				//calpressure();
// 				//Calshowpres();
// 				outbyte[0]=0xaa;
// 				outbyte[1]=C11b;
// 				outbyte[2]=AA12b;
// 				outbyte[3]=B11b;
// 				outbyte[4]=AA11b;
// 				outbyte[5]=B12b;
// 				outbyte[6]=C12b;
// 				outbyte[7]=outbyte[0]+outbyte[1]+outbyte[2]+outbyte[3]+outbyte[4]+outbyte[5]+outbyte[6];
// 				FLASH_PageErase(CalBak,1);
// 				FLASH_PageErase(CalAdd,1);
// 				for(i=0;i<8;i++)
// 				{
// 					Byte_WtNO(CalBak+i,outbyte[i]);	//备份地址
// 					Byte_WtNO(CalAdd+i,outbyte[i]);	//校正值地址
// 				}
// 				break;
// 			}
// 		}
// 	}

// 	while(!KEY_POWER||!KEY_TIME);
// 	keydelay();

// 	BB=PUMP;
// 	iocontrolon();
// 	AutoOffTimew=0;

// 	N=0;
// 	DarkAllIcon();
// 	while(KEY_POWER)
// 	{
// 		if((AutoOffTimew%50)<25)
// 		{
// 			OUT_VALVE(0);
// 			BB=PUMP;
// 			iocontrolon();
// 		}
// 		else
// 		{
// 			OUT_VALVE(1);
// 			PUMPPWM_DIS;
// 		}


// 		ADOKFlag=0;
// 		while(!ADOKFlag);
// 		calpressure();
// 		Calshowpres();
// 		#if 0
// 		if (T250ms == 0)
// 		{
// 			if (OneShot == 1)		// if one shot flag = 0 then
// 			{
// 				Calshowpres();	// if 1/4 second to show month process
// 				OneShot = 0;
// 			}
// 		}
// 		else
// 		{
// 			if (OneShot == 0)		// if one shot flag = 0 then
// 			{
// 				OneShot = 1;		// set on shot flag = 1
// 				DisplayHalfByte(0x10,DIAHundred);
// 				DisplayHalfByte(0x10,DIATen);
// 				DisplayHalfByte(0x10,DIASingle);
// 			}
// 		}
// 		#endif

// 		batcache[3]=batcache[2];
// 		batcache[2]=batcache[1];
// 		batcache[1]=batcache[0];
// 		batcache[0]=SARADC_GetConversionValue();
// 		N++;
// 		if(N>5)
// 		{
// 			battemp=batcache[0]+batcache[1]+batcache[2]+batcache[3];
// 			battemp/=4;
// 			battemp*=1440;
// 			battemp/=4096;
// 			battemp+=30;
// 			if(battemp<470||battemp>520)
// 			{
// 				DarkAllIcon();
// 				if(VoiceEnable)
// 				{
// 					if(VoiceType==1)
// 					{
// 						SoundNoWait(0xd0);
// 					}
// 					else if(VoiceType==2)
// 					{
// 						SoundNoWait(0x91);
// 					}
// 				}
// 				for(i=0;i<5;i++)
// 				{
// 					LBTIconOn;
// 					delay(15);
// 					LBTIconOff;
// 					delay(10);
// 				}
// 			}
// 		}
// 	}
// 	BB=PUMP | VALVE;
// 	iocontroloff();
// 	if(VoiceEnable)
// 	{
// 		if(VoiceType==1) SoundNoWait(0xd5);//test over
// 		else if(VoiceType==2) SoundNoWait(0x87);
// 		delay(4);
// 		if(Busy)
// 		{
// 			DarkAllIcon();
// 			DisplayHalfByte(0xE,DIATen);
// 			DisplayHalfByte(0xB,DIASingle);
// 			for(N=0;N<3;N++)
// 			{
// 				if(VoiceType==1) SoundNoWait(0xfe);//abnormal
// 				else if(VoiceType==2) SoundNoWait(0x8e);
// 				delay(30);
// 			}
// 		}
// 		else
// 		{
// 			AutoOffTimew=0;
// 			while(!Busy)
// 			{
// 				if(AutoOffTimew>100) break;
// 			}
// 			if(AutoOffTimew>100)
// 			{
// 				DarkAllIcon();
// 				DisplayHalfByte(0xE,DIATen);
// 				DisplayHalfByte(0xB,DIASingle);
// 				for(N=0;N<3;N++)
// 				{
// 					if(VoiceType==1) SoundNoWait(0xfe);//abnormal
// 					else if(VoiceType==2) SoundNoWait(0x8e);
// 					delay(30);
// 				}
// 			}
// 			else
// 			{
// 				if(VoiceType==1) SoundNoWait(0xe0);//normal
// 				else if(VoiceType==2) SoundNoWait(0x89);
// 				delay(4);
// 				AutoOffTimew=0;
// 				while(!Busy&&AutoOffTimew<100);
// 			}
// 		}
// 	}
// }
